package com.ato.java;

/**
 * @author wangjing
 * @create 2021--08--03--21:46
 */

/**
 * 单列设计模式：采取一定方法，对某个类智能存在一个实例对象
 */
public class Singleton {
    public static void main(String[] args) {
        Bank b1 = Bank.getInstance();
        Bank b2 = Bank.getInstance();
        System.out.println(b1 == b2); //  无论创建几次 都指向一个内存地址，因此是true
    }
}

/**
 * 1：饿汉模式：
 */
class Bank {
    //   1：私有化构造器
    private Bank() {
    }

    //    2:在内部创建类的对象   需要为静态的
    private static Bank instance = new Bank();

    //    3：提供公共的方法，返回类的对象
    public static Bank getInstance() {
        return instance;
    }
}

/**
 * 2：懒汉模式：
 */
class Bank1 {
    //   1：私有化构造器
    private Bank1() {
    }

    //    2: 声明当前类对象，但是不初始化赋值
    private static Bank1 instance = null;

    //    3:声明public  static的返回对象的实例
    public static Bank1 getInstance() {
        if (instance == null) {
            instance = new Bank1();
        }
        return instance;
    }
}

// 学习后手写
class  T{
    private  T(){};
    private  static  T  a = new T();
    public  static T getT(){
        return a;
    }
}